package com.tedu.review.day02;
/**
 * 类的创建过程（JVM虚拟机--内存创建流程:找  堆  方法区）
 * 1.从程序入口 加载xxx.class文件  类对象存到方法区中【方法区：并行】
 * 2.如果发现 加载xxx.class 文件中  存在static静态块  存入方法区  创建对象之前提前调用
 * 3.发现cs  引用  将这个引用转换为地址值：0X000，存入栈内存【栈区：并行】
 * 4.发现new 对象（），在堆内存中，给对象申请【随意空间】
 * 理解：宾馆 很多屋子    前台服务员【引用】---来一个客人【new】 随便开个房
 * 5.类创建【实例化】执行步骤：先执行方法区：静态块-->执行普通代码块-->初始化
 * 6.给栈中生成的地址值进行指向  堆内存中随意开辟空间（初始值）【与栈内存地址值一样】
 * 7.给栈中生成的地址值进行指向  堆内存中随意开辟空间（赋值）【与栈内存地址值一样】
 *
 * 调用过程：
 * 1.栈：编译器自动分配 使用完毕自行释放
 * 2.堆：一般由程序员分配释放 若程序员没有分配释放  java 程序自动进行分配回收
 *                                           GC垃圾回收
 * 3.全局区（静态区）：全局变量和静态变量在内存中存在一起
 *                  初始化的全局变量和静态变量存在一起的
 *                  未初始化的全局变量和未初始化的静态变量在相邻的另一块区域
 *                  ---程序结束   释放
 * 4.常量池：存在方法区中   --程序结束     释放方法【JavaAPI  字符串】
 *
 *
 *
 */

import java.util.concurrent.Callable;

public class 类的创建过程 {
    public static void main(String[] args) {
        /*完成一次创建对象*/
        Countryside cs=new Countryside();

    }

}
/*测试类：类创建过程   一个  java文件  创建两个类*/
class Countryside{
    /*代码块*/
    {
        System.out.println("请问厕所在哪个科室：赵四");

    }
    /*静态代码块*/
    static{
        System.out.println("爹  我跟小萌的事以后你就别管了");
    }
    /*1.成员变量：变量  类中存在变量就是成员变量  可以有修饰符修饰*/
    private String name="赵四";
    private int age=56;
    /*2.构造器  构造方法       句柄：创建对象初始化*/
    public Countryside(){
        name="刘能";
        System.out.println(name+"这车能看不能摸  但是可以往外说");
    }

}